SUPPORT / SAMPLES & SAS NOTES
 

Support

Problem Note 51984: A %LET statement might generate unexpected results when used to create a macro variable name in open code

DetailsAboutRate It
Unexpected results might occur when using an expression to build a macro variable in a %LET statement in open code. In the example code below, we are trying to create a macro variable called BB_AA with a value of 100:
%macro abc(value); %let i=%length(&value); %substr(&value,1,&i) %mend; %let a=bb; %let %abc(&a)_aa=100; %put _user_;

The code incorrectly generates a macro variable called BB with a value of _aa=100.

To circumvent the problem, do one of the following:

  1. Use the %UNQUOTE macro function. For example:
    %macro abc(value); %let i=%length(&value); %substr(&value,1,&i) %mend; %let a=bb; %let %unquote(%abc(&a)_aa)=100; %put _user_;
  2. Place the %LET statements within a macro definition. For example:
    %macro abc(value); %let i=%length(&value); %substr(&value,1,&i) %mend; %macro test; %let a=bb; %let %abc(&a)_aa=100; %put _user_; %mend test; %test
  3. Remove the macro call from the expression. For example:
    %macro abc(value); %let i=%length(&value); %substr(&value,1,&i) %mend; %let a=bb; %let temp=%abc(&a); %let &temp._aa=100; %put _user_;


Operating System and Release Information

Product FamilyProductSystemSAS Release
ReportedFixed*
SAS SystemBase SASz/OS9.3 TS1M09.4 TS1M2
Z649.3 TS1M09.4 TS1M2
Microsoft® Windows® for x649.3 TS1M0
Microsoft Windows Server 2003 Datacenter Edition9.3 TS1M0
Microsoft Windows Server 2003 Enterprise Edition9.3 TS1M0
Microsoft Windows Server 2003 Standard Edition9.3 TS1M0
Microsoft Windows Server 2003 for x649.3 TS1M0
Microsoft Windows Server 20089.3 TS1M0
Microsoft Windows Server 2008 R29.3 TS1M0
Microsoft Windows Server 2008 for x649.3 TS1M0
Microsoft Windows XP Professional9.3 TS1M0
Windows 7 Enterprise 32 bit9.3 TS1M09.4 TS1M2
Windows 7 Enterprise x649.3 TS1M09.4 TS1M2
Windows 7 Home Premium 32 bit9.3 TS1M09.4 TS1M2
Windows 7 Home Premium x649.3 TS1M09.4 TS1M2
Windows 7 Professional 32 bit9.3 TS1M09.4 TS1M2
Windows 7 Professional x649.3 TS1M09.4 TS1M2
Windows 7 Ultimate 32 bit9.3 TS1M09.4 TS1M2
Windows 7 Ultimate x649.3 TS1M09.4 TS1M2
Windows Vista9.3 TS1M0
Windows Vista for x649.3 TS1M0
64-bit Enabled AIX9.3 TS1M09.4 TS1M2
64-bit Enabled HP-UX9.3 TS1M09.4 TS1M2
64-bit Enabled Solaris9.3 TS1M09.4 TS1M2
HP-UX IPF9.3 TS1M09.4 TS1M2
Linux9.3 TS1M09.4 TS1M2
Linux for x649.3 TS1M09.4 TS1M2
Solaris for x649.3 TS1M09.4 TS1M2
* For software releases that are not yet generally available, the Fixed Release is the software release in which the problem is planned to be fixed.